package com.xq.mapper;

import com.xq.pojo.User;
import com.xq.utils.PageUtils;

import java.util.List;

/**
 * @author xq
 * @version 1.0
 * @date 2021/4/2 15:47
 * @description 用户数据接口层
 */
public interface UserMapper {

    /**
     * 添加一条用户数据
     * @param user 用户对象
     * @return 返回一个状态码，是否添加成功
     */
    int addUser(User user);

    /**
     * 修改一条用户数据
     * @param user 用户对象
     * @return 返回一个状态码，是否修改成功
     */
    int updateUserById(User user);

    /**
     * 删除一条用户数据，根据用户Id删除
     * @param userId 用户ID
     * @return 返回一个状态码，是否删除成功
     */
    int deleteUserByUserId(Integer userId);

    /**
     * 查询所有用户数据
     * @return 返回从数据库查询用户表的所有数据
     */
    List<User> getUserAll();

    /**
     * 根据用户ID查询单个用户数据
     * @param userId 用户Id
     * @return 返回用户单个数据
     */
    User getUserOne(Integer userId);

    /**
     * 根据用户姓名模糊查询用户集合
     * @param name 用户姓名
     * @return 返回一个用户集合
     */
    List<User> getUserByFuzzyName(String name);

    /**
     * 根据用户对象的用户姓名模糊查询用户集合
     * @param user 用户对象
     * @return 返回一个用户集合
     */
    List<User> getUserByFuzzyUserInName(User user);

    /**
     * 分页查询用户数据，无需条件查询
     * @param page 分页对象
     * @return 返回用户集合
     */
    List<User> getUserByPage(PageUtils page);

    /**
     * 分页查询用户数据条数
     * @return 返回用户数据条数
     */
    Integer getUserByTotalDataCount();

    /**
     * 分页查询用户数据，使用RowBounds工具来进行分页
     * @param pageUtils 分页对象
     * @return 返回用户数据
     */
    List<User> getUserByPageUseRowBounds(PageUtils pageUtils);

    /**
     * 查询用户所有数据，使用as关键字给字段取别名
     * @return 返回用户数据
     */
    List<User> getAllUseMySQLAs();

    /**
     * 根据模糊用户姓名或用户年龄，进行分页查询
     * @param user 用户对象
     * @return 返回用户数据
     */
    List<User> getUserByPageInFuzzyUserNameAndUserAge(User user);

    /**
     * 根据模糊用户姓名或用户密码，如果用户姓名和用户密码都为空的话默认查询用户年龄[年龄<输入年龄]（如果为空不查询），以及分页
     * @param user 用户对象
     * @return 返回用户数据
     */
    List<User> getUserByPageInFuzzyUserNameAndUserPasswordDefaultUserAge(User user);


    /**
     * 修改一条用户数据，如果对象中的字段为空则不修改
     * @param user 用户对象
     * @return 返回一个状态码，是否修改成功
     */
    int updateUserByIdInNullFields(User user);

    /**
     * 根据id集合查询用户数据
     * @param ids id集合
     * @return 返回用户数据
     */
    List<User> getUserByIds(List<Integer> ids);
}
